<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        //         利用递归求100的阶乘 f(n)=f(n-1)*n
        // 利用递归求斐波那契数列  F(n)=F(n-1)+F(n-2)
        // 1、1、2、3、5、8、13、21、34、55……
        // F(0)=1，F(1)=1, F(n)=F(n-1)+F(n-2)（n>=2，n∈N*）
        // 利用递归求两个数的最大公约数(利用辗转相除法) f(m,n)

        // 1-递推式 -前一项和后一项的 关系
        // 2- 根据递推式 写出js代码
        // 3- 临界值

        // 1-递推式 -前一项和后一项的 关系
        // 2- 根据递推式 写出js代码
        // 3- 临界值
        // 利用递归求100的阶乘 f(n)=f(n-1)*n
        function f(n) {
            //  临界值 1的阶乘是1
            if (n == 1) {
                return 1
            } else {
                return f(n - 1) * n

            }
        }
        var r = f(10);
        console.log(r);


        // 利用递归求斐波那契数列  F(n)=F(n-1)+F(n-2)
        // 1、1、2、3、5、8、13、21、34、55……
        // F(0)=1，F(1)=1, F(n)=F(n-1)+F(n-2)（n>=2，n∈N*）
        //  F(n)=F(n-1)+F(n-2)
        function F(n) {
            //临界值
            if (n == 0 || n == 1) {
                return 1;
            }
            return F(n - 1) + F(n - 2);
        }
        console.log((F(10)));



        // 利用递归求两个数的最大公约数(利用辗转相除法) f(m,n)

        // m=8 n=20
        // var r = m%n;=8
        // m=20 n = 8
        // r ?==0
        function gys(m, n) {
            console.log('求', m, n, '的最大公约数');
            var r = m % n;
            m = n;
            n = r;
            if (r == 0) {
                //如果余数是0 m就是最大公约数
                return m
            } else {
                return gys(m, n);
            }

        }
        console.log(gys(8, 20));
    </script>

</body>

</html>